﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using N2.Details;
using Dinamico.Models;
using System.ComponentModel;
using Dynamico.Service;

namespace Dinamico.Models
{
    [N2.PartDefinition("PartProductGoogle",
        Description = "PartProductGoogle",
        ToolTip = "PartProductGoogle",
        SortOrder =30,
        IconUrl = "~/upload/img/icons/product.png")]
    [N2.Integrity.AvailableZone("Offers", "Offers")]
    public class PartProductGoogleModel : ContentPart
    {
        [EditableText("Nazwa produktu.", 0)]
        public virtual string Gname { get; set; }

        #region version
        [EditableText("Nazwa produktu wersja.", 1)]
        public virtual string GnameVersion { get; set; }

        [EditableText("F. wersja1:", 2)]
        public virtual string AtrF { get; set; }
        [EditableText("G. wersja1:", 3)]
        public virtual string AtrG { get; set; }
        #endregion

        #region price
        [EditableText("D. obecna cena netto", 4)]
        public virtual string AtrD { get; set; }
        [EditableText("E. obecna cena", 5)]
        public virtual string CurrentPrice { get; set; }
        [EditableText("W. stara cena  ", 6)]
        public virtual string OldPrice { get; set; }
        #endregion 

        #region  desc
        [EditableText("Opis produktu.", 7)]
        public virtual string Description { get; set; }
        [EditableText("H. ", 8)]
        public virtual string AtrH { get; set; }
        [EditableText("I.", 9)]
        public virtual string AtrI { get; set; }
        [EditableText("J.", 10)]
        public virtual string AtrJ { get; set; }
        [EditableText("K.", 11)]
        public virtual string AtrK { get; set; }
        [EditableText("L.", 12)]
        public virtual string AtrL { get; set; }
        [EditableText("M.", 13)]
        public virtual string AtrM { get; set; }
        #endregion

        #region desc2
        [EditableText("Wymiary:", 14)]
        public virtual string Description2 { get; set; }
        [EditableText("N.", 15)]
        public virtual string AtrN { get; set; }
        [EditableText("O.", 16)]
        public virtual string AtrO { get; set; }
        [EditableText("P.", 17)]
        public virtual string AtrP { get; set; }
        [EditableText("Q.", 18)]
        public virtual string AtrQ { get; set; }
        #endregion

        #region desc3
        [EditableText("Material", 19)]
        public virtual string Description3 { get; set; }
        [EditableText("R.", 20)]
        public virtual string AtrR { get; set; }
        [EditableText("S.", 21)]
        public virtual string AtrS { get; set; }
        [EditableText("T.", 21)]
        public virtual string AtrT { get; set; }
        #endregion

        [EditableCheckBox("W sprzedazy", 2)]
        public virtual bool InSale { get; set; }
        

        [EditableText("Ocena: Opinie o produkcie", 23)] //(na przykład średnia ocena). Jeśli istnieje wiele opinii o produkcie, zaznacz dane zagregowanych opinii (na przykład średnią ocenę przyznawaną przez użytkowników) przy użyciu właściwości Review-aggregate, zamiast zaznaczać poszczególne opinie.", 6)]
        public virtual string Review { get; set; }
        [EditableText("Ocena: Srednia ocena  ", 24)] //(na przykład średnia ocena). Jeśli istnieje wiele opinii o produkcie, zaznacz dane zagregowanych opinii (na przykład średnią ocenę przyznawaną przez użytkowników) przy użyciu właściwości Review-aggregate, zamiast zaznaczać poszczególne opinie.", 6)]
        public virtual string ReviewAverage { get; set; }
        [EditableText("Ocena: Ilość ocen", 25)] //(na przykład średnia ocena). Jeśli istnieje wiele opinii o produkcie, zaznacz dane zagregowanych opinii (na przykład średnią ocenę przyznawaną przez użytkowników) przy użyciu właściwości Review-aggregate, zamiast zaznaczać poszczególne opinie.", 6)]
        public virtual string ReviewAverageCount { get; set; }


        [EditableText("Opis produktu. Dostawa ", 26)]
        public virtual string Description4 { get; set; }

        [EditableText("X. Marka produktu.", 27)]// Może zawierać zagnieżdżone informacje o organizacji. Google zaleca uwzględnienie właściwości brand i co najmniej jednej właściwości identifier przy każdym produkcie.", 4)]
        public virtual string Brand { get; set; }
        
        [EditableText("Identyfikator produktu.", 29)]// Google zaleca uwzględnienie właściwości brand i co najmniej jednej właściwości identifier przy każdym produkcie.", 7)]
        public virtual string Identifier { get; set; }

        [EditableText("Typ:asin,isbn,mpn,sku,upc,", 30)]
        public virtual string IdentifierType { get; set; }

        #region images
        [EditableImage("URL zdjęcia produktu.", 31)]
        public virtual string Image { get; set; }
        
        [EditableImage("URL zdjęcia produktu. Mały", 32)]
        public virtual string ThumbImage { get; set; }

        [EditableImage("URL2 zdjęcia produktu.", 33)]
        public virtual string Image2 { get; set; }
        
        [EditableImage("URL3 zdjęcia produktu.", 34)]
        public virtual string Image3 { get; set; }

        [EditableImage("URL4 zdjęcia produktu.", 35)]
        public virtual string Image4 { get; set; }
        #endregion



        /// <summary>
        /// [EditableFreeTextArea(" Oferta sprzedaży produktu. Zawiera ofertę zagnieżdżoną lub zagregowaną.", 255)]
        /// public virtual string OfferDetails 
        /// </summary>
        public IList<PartProductOfferGoogleModel> OfferDetails { get; set; }

        string pricetop;
        public string PriceTop {
            get
            {
                if (string.IsNullOrEmpty(pricetop))
                {
                    var prices = Utils.GetTopFlourPrice(this.CurrentPrice);
                    pricetop = prices[1];
                    pricefloor = prices[2];
                }
                
                return pricetop;
            }
        }

        string pricefloor;
        public string PriceFloor
        {
            get
            {
                if (string.IsNullOrEmpty(pricefloor))
                {
                    var prices = Utils.GetTopFlourPrice(this.CurrentPrice);
                    pricetop = prices[1];
                    pricefloor = prices[2];
                }

                return pricefloor;
            }
        }
    }
}